package com.dexing.od1;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 *  小明有 n 块木板，第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。
 *  小明买了一块长度为 m 的木料，这块木料可以切割成任意块， 拼接到已有的木板上，用来加长木板。 小明想让最短的木板尽量长。
 *  请问小明加长木板后，最短木板的长度可以为多少？
 *  输入描述
 *  输入的第一行包含两个正整数，n(1≤n≤10^3),m(1≤m≤10^6) n表示木板数，m表示木板长度。
 *  输入的第二行包含n个正整数，a1,a2,...an(1≤ai≤10^6)。
 *  输出描述
 *  输出的唯一一行包含一个正整数，表示加长木板后，最短木板的长度最大可以为多少？
 *  示例一：
 *  输入：
 *  5 3
 *  4 5 3 5 5
 *  输出：
 *  5 
 *  说明： 给第1块木板长度增加1，给第3块木板长度增加2后， 这5块木板长度变为[5,5,5,5,5]，最短的木板的长度最大为5。 
 *  示例二：
 *  输入：
 *  5 2
 *  4 5 3 5 5
 *  输出：
 *  4 
 *  给第3块木板长度增加1后， 这5块木板长度变为[4,5,4,5,5]，剩余的木料长度为1。此时剩余木料无论给哪块木板加长，最短木料的长度都为4。
 *
 *
 *  1：还是贪心的思想，遍历给的木料长度，每次都补一下最短的木板（只拿出1m的长度），每次补完之后重新排序，找到最短继续补1m, 重复此步骤，直到木料用完。
 */
public class D2075Muban {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] s = scanner.nextLine().split(" ");
        int n = Integer.parseInt(s[0]);
        int m = Integer.parseInt(s[1]);
        List<Integer> list = Arrays.asList(scanner.nextLine().split(" ")).stream().map(Integer::parseInt).collect(Collectors.toList());
        Collections.sort(list);
        while (m > 0) {
            Integer integer = list.get(0);
            integer+=1;
            list.set(0,integer);
            m -= 1;
            Collections.sort(list);
        }
        System.out.println(list.get(0));


    }
}
